package web.suzy.oj.common.result;

import lombok.Data;

/**
 * YangSuzy 软件工作室
 * 类名: ResultBean
 * 描述: 响应消息类
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/9 14:36
 */

@Data
public class ResultBean<T> {
    /**
     * 状态码
     */
    private final Integer status;

    /**
     * 返回的数据
     */
    private final T data;

    /**
     * 自定义信息
     */
    private final String msg;

    /**
     * 方法名: successResponse
     * 描述: 响应消息成功
     *
     * @param data 返回响应数据
     * @param msg  返回自定义消息
     * @return web.suzy.oj.common.result.ResultBean<T>
     * @date 2022/11/9 14:39
     * @auther YangSuzy
     **/
    public static <T> ResultBean<T> successResponse(T data, String msg) {
        return new ResultBean<>(ResultStatus.SUCCESS.getStatus(), data, msg);
    }

    public static <T> ResultBean<T> successResponse(T data) {
        return new ResultBean<>(ResultStatus.SUCCESS.getStatus(), data, "success");
    }

    public static <T> ResultBean<T> successResponse(String msg) {
        return new ResultBean<>(ResultStatus.SUCCESS.getStatus(), null, msg);
    }

    public static <T> ResultBean<T> successResponse() {
        return new ResultBean<>(ResultStatus.SUCCESS.getStatus(), null, "success");
    }

    /**
     * 方法名: errorResponse
     * 描述: 响应消息失败
     *
     * @param msg          返回自定义信息
     * @param resultStatus 返回结果状态
     * @return web.suzy.oj.common.result.ResultBean<T>
     * @date 2022/11/9 14:42
     * @auther YangSuzy
     **/
    public static <T> ResultBean<T> errorResponse(String msg, ResultStatus resultStatus) {
        return new ResultBean<T>(resultStatus.getStatus(), null, msg);
    }

    public static <T> ResultBean<T> errorResponse(String msg) {
        return new ResultBean<T>(ResultStatus.FAIL.getStatus(), null, msg);
    }

    public static <T> ResultBean<T> errorResponse(ResultStatus resultStatus) {
        return new ResultBean<T>(resultStatus.getStatus(), null, resultStatus.getDescription());
    }

    public static <T> ResultBean<T> errorResponse(String msg, Integer status) {
        return new ResultBean<T>(status, null, msg);
    }

}
